/************************************************************************
**
**  Copyright (C) 2009, 2010, 2011  Strahinja Markovic  <strahinja.markovic@gmail.com>
**
**  This file is part of Sigil.
**
**  Sigil is free software: you can redistribute it and/or modify
**  it under the terms of the GNU General Public License as published by
**  the Free Software Foundation, either version 3 of the License, or
**  (at your option) any later version.
**
**  Sigil is distributed in the hope that it will be useful,
**  but WITHOUT ANY WARRANTY; without even the implied warranty of
**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
**  GNU General Public License for more details.
**
**  You should have received a copy of the GNU General Public License
**  along with Sigil.  If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/

#include <stdafx.h>
#include "FontResource.h"
#include "Misc/Utility.h"

FontResource::FontResource( const QString &fullfilepath, QObject *parent )
    :
    Resource( fullfilepath, parent ),
    m_FontId( -1 )
{

}


Resource::ResourceType FontResource::Type() const
{
    return Resource::FontResourceType;
}

bool FontResource::Delete( )
{
    // The font has to be unloaded before deleting
    UnloadFont();
    return Resource::Delete();
}

QString FontResource::GetObfuscationAlgorithm() const
{
    return m_ObfuscationAlgorithm;
}


void FontResource::SetObfuscationAlgorithm( const QString &algorithm )
{
    m_ObfuscationAlgorithm = algorithm;
}

QString FontResource::GetFontFamily()
{
    if ( m_FontFamily.isEmpty() )
        InitializeFontFamily();
    return m_FontFamily;
}

void FontResource::InitializeFontFamily() {
    if ( !QFileInfo( GetFullPath() ).exists() )
        return;

    int id=QFontDatabase::addApplicationFont( GetFullPath() );

    if (id!=-1) {
        // We assume that every file contains only one font family
        QStringList families = QFontDatabase::applicationFontFamilies (id);
        m_FontFamily=families[0];
        // Remove font - we do not want to display it, if it is not actually referenced by
        // a @font-face rule
        QFontDatabase::removeApplicationFont(id);
    }
}

void FontResource::LoadFont( )
{
    if (  m_FontId != -1 || !QFileInfo( GetFullPath() ).exists() )
        return;
     
    m_FontId=QFontDatabase::addApplicationFont( GetFullPath() );
}

void FontResource::UnloadFont()
{
    if ( m_FontId != -1 )
        QFontDatabase::removeApplicationFont(m_FontId);
    m_FontId = -1;
}
